package beans;

import edu.upn.sigemfi.ope.bc.ExtornoFacadeLocal;
import edu.upn.sigemfi.ope.be.Extorno;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;

public class ExtornoController {

    private ExtornoFacadeLocal local;
    private Extorno extorno;
    private String criterio;

    public ExtornoController() {
        local = lookupExtornoFacade();
    }

    public String getCriterio() {
        return criterio;
    }

    public void setCriterio(String criterio) {
        this.criterio = criterio;
    }

    public Extorno getExtorno() {
        return extorno;
    }

    public void setExtorno(Extorno extorno) {
        this.extorno = extorno;
    }

    public String nuevo() {
        extorno = new Extorno();
        return "nuevo";
    }

    public String cancelar() {
        extorno = null;
        return "listar";
    }

    public String registrar() {
        try {
            if (extorno != null) {
                local.create(extorno);
                mostrarMensaje("Exito", "El registro del extorno se realizo exitosamente.", FacesMessage.SEVERITY_INFO);
            } else {
                mostrarMensaje("Error", "Asegurese de haber creado una extorno", FacesMessage.SEVERITY_ERROR);
                extorno = new Extorno();
                return "";
            }
        } catch (Exception e) {
            local = lookupExtornoFacade();
            mostrarMensaje(e.getMessage(), e.getMessage(), FacesMessage.SEVERITY_ERROR);
        }
        return "listar";
    }

    public String actualizar() {
        try {
            if (extorno != null) {
                local.edit(extorno);
                mostrarMensaje("Exito", "La actualizacion de la extorno se realizo exitosamente.", FacesMessage.SEVERITY_INFO);
            } else {
                mostrarMensaje("Error", "Asegurese de haber seleccionado una extorno", FacesMessage.SEVERITY_ERROR);
                return "";
            }
        } catch (Exception e) {
            local = lookupExtornoFacade();
            mostrarMensaje(e.getMessage(), e.getMessage(), FacesMessage.SEVERITY_ERROR);
        }
        return "listar";
    }

    public String eliminar() {
        try {
            if (extorno != null) {
                local.remove(extorno);
                mostrarMensaje("Exito", "La eliminacion de la extorno se realizo exitosamente.", FacesMessage.SEVERITY_INFO);
            } else {
                mostrarMensaje("Error", "Asegurese de haber seleccionado una extorno", FacesMessage.SEVERITY_ERROR);
                return "";
            }
        } catch (Exception e) {
            local = lookupExtornoFacade();
            mostrarMensaje(e.getMessage(), e.getMessage(), FacesMessage.SEVERITY_ERROR);
        }
        return "listar";
    }

    public List<Extorno> getExtornos() {
        try {
            return local.findAll();
        } catch (Exception e) {
            local = lookupExtornoFacade();
            e.printStackTrace();
        }
        return null;
    }

    public Extorno buscar(Long idExtorno) {
        try {
            return local.find(idExtorno);
        } catch (Exception e) {
            mostrarMensaje(e.getMessage(), e.getMessage(), FacesMessage.SEVERITY_ERROR);
        }
        return null;
    }

    public SelectItem[] getExtornoSI() {
        SelectItem[] select = null;
        try {
            List<Extorno> lista = getExtornos();
            if (lista != null) {
                select = new SelectItem[lista.size() + 1];
                int i = 0;
                select[i++] = new SelectItem(null, "Seleccione una Extorno");
                for (Extorno go : lista) {
                    select[i++] = new SelectItem(go, go.getIdExtorno().toString());
                }
            } else {
                select = new SelectItem[1];
                select[0] = new SelectItem(null, "No se encontraron Extornos");
            }
        } catch (Exception e) {
            mostrarMensaje(e.getMessage(), e.getMessage(), FacesMessage.SEVERITY_ERROR);
            select = new SelectItem[1];
            select[0] = new SelectItem(null, "Error al consultar los datos");
        }
        return select;
    }

    //Metodo para mostrar mensajes en la pagina
    public void mostrarMensaje(String resumen, String detalle, FacesMessage.Severity severidad) {
        try {
            FacesMessage fm = new FacesMessage(severidad, resumen, detalle);
            FacesContext.getCurrentInstance().addMessage(fm.toString(), fm);
        } catch (Exception e) {
            FacesMessage fm = new FacesMessage(FacesMessage.SEVERITY_ERROR, e.getMessage(), e.getMessage());
            FacesContext.getCurrentInstance().addMessage(fm.toString(), fm);
        }
    }

    public Extorno buscar_Extorno(Long id) throws Exception {
        return local.find(id);
    }

    private ExtornoFacadeLocal lookupExtornoFacade() {
        try {
            Context c = new InitialContext();
            return (ExtornoFacadeLocal) c.lookup("java:comp/env/ExtornoFacade");
        } catch (NamingException ne) {
            Logger.getLogger(getClass().getName()).log(Level.SEVERE, "exception caught", ne);
            throw new RuntimeException(ne);
        }
    }
}
